/*
练习2-2 线性表循环右移
分数 20
作者 陈越
单位 浙江大学

给定顺序表 A=(a1​,a2​,⋯,an​)，请设计一个时间和空间上尽可能高效的算法将该线性表循环右移指定的 m 位。例如，(1,2,5,7,3,4,6,8) 循环右移 3 位（m=3) 后的结果是 (4,6,8,1,2,5,7,3)。
输入格式：

第一行输入 n ( 1≤n≤105)、m（m≥0）；第二行输入 n 个整数。所有数字在 int 型整数范围内，同行数字间以空格分隔。
输出格式：

输出循环右移 m 位以后的整数序列。数字间以 1 个空格分隔，行首尾不得有多余空格。
输入样例：

6 2
1 2 3 4 5 6

输出样例：

5 6 1 2 3 4
*/

#include <iostream>
#include "../base/LinkedList.cpp"

using namespace std;

int main() {
    int n, m;
    cin >> n >> m;

    LinkedList *list = init();
    input(list, n);

    m %= n;
    if (m > 0) {
        Node *p = list->head;
        for (int i = 0; i < n - m; ++i) {
            p = p->next;
        }
        // cout << p->data << endl;
        // remove head node from list
        list->head->prev->next = list->head->next;
        list->head->next->prev = list->head->prev;
        // insert head node after p node
        list->head->next = p->next;
        p->next->prev = list->head;
        p->next = list->head;
        list->head->prev = p;
    }

    printWithEndBlank(list);
    freeList(list);
    
    return 0;
}